package persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import util.Conexion;
import bean.Marca;
import bean.Modelo;

public class MarcaDAO {

	public List<Marca> listar() throws SQLException{
		List<Marca> listado = new ArrayList<Marca>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,Marca,tbiden,orden,situacion " +
				"FROM tbl_Marca");
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Marca marca = new Marca();
			marca.setId(rs.getInt("id"));
			marca.setMarca(rs.getString("Marca"));
			marca.setTbiden(rs.getString("tbiden"));
			marca.setSituacion(rs.getString("situacion"));
			marca.setOrden(rs.getInt("orden"));
			listado.add(marca);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Marca> buscarPorMarca(String filtro,String tipo,String situacion) throws SQLException{
		List<Marca> listado = new ArrayList<Marca>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,Marca,tbiden,orden,situacion " +
				"FROM tbl_Marca WHERE situacion in ("+situacion+") and tbiden=? and Marca like ?");
		pstm.setString(1, tipo);
		pstm.setString(2, filtro + "%");
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Marca marca = new Marca();
			marca.setId(rs.getInt("id"));
			marca.setMarca(rs.getString("marca"));
			marca.setTbiden(rs.getString("tbiden"));
			marca.setSituacion(rs.getString("situacion"));
			marca.setOrden(rs.getInt("orden"));
			listado.add(marca);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Marca> buscarPorMarca(String filtro,String tipo) throws SQLException{
		List<Marca> listado = new ArrayList<Marca>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,Marca,tbiden,orden,situacion " +
						"FROM tbl_Marca WHERE tbiden=? and replace(Marca,' ','') = ?");
		pstm.setString(1, tipo);	
		pstm.setString(2, filtro.replace(" ", ""));	
		ResultSet rs = pstm.executeQuery();
		while (rs.next()) {
			Marca marca = new Marca();
			marca.setId(rs.getInt("id"));
			marca.setMarca(rs.getString("marca"));
			marca.setTbiden(rs.getString("tbiden"));
			marca.setSituacion(rs.getString("situacion"));
			marca.setOrden(rs.getInt("orden"));
			listado.add(marca);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Marca> buscarPorMarca(Modelo filtro) throws SQLException{
		List<Marca> listado = new ArrayList<Marca>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
				"SELECT id,Marca,tbiden,orden,situacion " +
						"FROM tbl_Marca WHERE tbiden=? and replace(Marca,' ','') = ? order by orden");	
		pstm.setString(1, filtro.getTbiden());
		pstm.setString(2, filtro.getModelo());	
		ResultSet rs = pstm.executeQuery();
		while (rs.next()) {
			Marca marca = new Marca();
			marca.setId(rs.getInt("id"));
			marca.setMarca(rs.getString("marca"));
			marca.setTbiden(rs.getString("tbiden"));
			marca.setSituacion(rs.getString("situacion"));
			marca.setOrden(rs.getInt("orden"));
			listado.add(marca);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public List<Marca> buscarPorOrden(int filtro,String tipo,String situacion) throws SQLException{
		List<Marca> listado = new ArrayList<Marca>();
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
		"SELECT id,Marca,tbiden,orden,situacion " +
		"FROM tbl_Marca WHERE situacion in ("+situacion+")  and tbiden=? and orden = ?");
		pstm.setString(1, tipo);
		pstm.setInt(2, filtro);
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Marca marca = new Marca();
			marca.setId(rs.getInt("id"));
			marca.setMarca(rs.getString("marca"));
			marca.setTbiden(rs.getString("tbiden"));
			marca.setSituacion(rs.getString("situacion"));
			marca.setOrden(rs.getInt("orden"));
			listado.add(marca);
		}
		rs.close();
		pstm.close();
		return listado;
	}
	
	public int insertar(Marca marca) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
		"insert into tbl_Marca (Marca,orden,situacion,usuario_creacion,fecha_creacion,tbiden) values (?,?,?,?,?,?)");
		pstm.setString(1, marca.getMarca());
		pstm.setInt(2, marca.getOrden());
		pstm.setString(3, marca.getSituacion());
		pstm.setString(4, marca.getUsuario_creacion());
		pstm.setInt(5, marca.getFecha_creacion());
		pstm.setString(6, marca.getTbiden());
		int resultado = pstm.executeUpdate();
		pstm.close();
		return resultado;
	}
	
	public int actualizar(Marca marca) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexionMSQL().prepareStatement(
		"update tbl_Marca set Marca=?,orden=?,situacion = ?,usuario_modificacion=?,fecha_modificacion=?,tbiden=? where id=?");
		pstm.setString(1, marca.getMarca());
		pstm.setInt(2, marca.getOrden());
		pstm.setString(3, marca.getSituacion());
		pstm.setString(4, marca.getUsuario_modificacion());
		pstm.setInt(5, marca.getFecha_modificacion());
		pstm.setString(6, marca.getTbiden());
		pstm.setInt(7, marca.getId());
		int resultado = pstm.executeUpdate();
		pstm.close();
		return resultado;
	}
}
